package com.code.p9.工厂方法模式.P2通用工厂模式;

/**
 * 描述: describe
 *
 * @author CodeYang_Site
 * @version 2021/6/5 22:04
 */
public class 工厂模式 {

    /**
     * 工厂方法模式
     * Define an interface for creating an object,but let subclasses decide which class to
     * instantiate.Factory Method lets a class defer instantiation to subclasses.
     * （定义一个用于创建对象的接口，让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。）
     *
     */

    /**
     * 通用的工厂模型
     * 1.抽象产品类Product负责定义产品的共性，实现对事物最抽象的定义
     * 2.；Creator为抽象创建类，也就是抽象工厂，具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。
     * 3.抽象工厂中的获取对象实例 推迟到子类使用时
     *
     * @param args
     */
//    public static void main(String[] args) {
//        Creator factory = new ConcreteCreator();
//        Product product1 = factory.createProduct(ConcreteProduct1.class);
//        Product product2 = factory.createProduct(ConcreteProduct2.class);
//
//        // 用户只关注是不是这个对象,不关注他是怎么生产的
//
//        product1.pri();
//        product1.pub();
//        product2.pri();
//        product2.pub();
//
//    }


    public static void main(String[] args) {
        Product product1 = ProductFactory.createProduct(ConcreteProduct1.class);
        Product product11 = ProductFactory.createProduct(ConcreteProduct1.class);
        Product product2 = ProductFactory.createProduct(ConcreteProduct2.class);
        Product product21 = ProductFactory.createProduct(ConcreteProduct2.class);

        System.out.println(product1);
        System.out.println(product11);
        System.out.println(product2);
        System.out.println(product21);

        product1.pri();
        product2.pri();
    }


}
